package org.huifei.a5_prototype;

import java.io.*;

/**
 * Created by huifei on 2017/7/11.
 */
public class Prototype implements Cloneable, Serializable {

    /**
     * 浅复制：将一个对象复制后，基本数据类型的变量都会重新创建，
     *而引用数据类型，指向的还是原对象的所指向的
     *
     * @return
     * @throws CloneNotSupportedException
     */

    @Override
    public Object clone() throws CloneNotSupportedException {
        Prototype prototype = (Prototype) super.clone();
        return prototype;
    }


    /**
     * 深复制：讲一个对象复制后，无论是基本数据类型还是引用数据类型，
     * 都是重新创建的
     *
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
    public Object deepClone() throws IOException, ClassNotFoundException {

        /*写入当前对象的二进制流*/
        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        ObjectOutputStream oos = new ObjectOutputStream(bos);

        oos.writeObject(this);

        /*读出二进制流产生的新对象*/
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());

        ObjectInputStream ois = new ObjectInputStream(bis);

        return ois.readObject();

    }

}
